package com.meta.platform.contract.intf.entity;


import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.Objects;


/**
 * 合同表
 *
 * @author M.simple
 * @email 1111111111111@qq.com
 * @date 2020-12-08 15:53:37
 */
@Data
public class Contract implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 自增主键
     */
    private Long id;

    /**
     * 合同名称
     */
    @ApiModelProperty("合同名称")
    private String contractName;

    /**
     * 关联客户id
     */
    @ApiModelProperty("关联客户id")
    private Long customerId;

    /**
     * 合同类型
     */
    @ApiModelProperty("合同类型")
    private String contractType;

    /**
     * 合同状态
     */
    @ApiModelProperty("合同状态")
    private String contractStatus;

    /**
     * 合同金额
     */
    @ApiModelProperty("合同金额")
    private BigDecimal contractAmount;

    /**
     * 合同支付方式
     */
    @ApiModelProperty("合同支付方式")
    private String contractPayType;

    /**
     * 合同开始日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty("合同开始日期")
    private Date contractStartDate;

    /**
     * 合同结束日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty("合同结束日期")
    private Date contractEndDate;

    /**
     * 合同编号
     */
    @ApiModelProperty("合同编号")
    private String contractNum;

    /**
     * 客户方签约人
     */
    @ApiModelProperty("客户方签约人")
    private Long customerSignContactId;

    /**
     * 我方签约人
     */
    @ApiModelProperty("我方签约人")
    private Long ourSideSignUserId;

    /**
     * 签约日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @ApiModelProperty("签约日期")
    private Date contractSignDate;

    /**
     * 合同文件
     */
    @ApiModelProperty("合同文件")
    private String contractFileIds;

    /**
     * 租户ID
     */
    @ApiModelProperty("租户ID")
    private Long tenantId;

    /**
     * 删除标志（0代表存在 1代表删除）
     */
    private Integer delFlag;

    /**
     * 创建者
     */
    @ApiModelProperty("创建者")
    private Long createBy;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("创建时间")
    private Date createTime;

    /**
     * 更新者
     */
    private Long updateBy;

    /**
     * 更新时间
     */
    private Date updateTime;

    /**
     * 备注
     */
    @ApiModelProperty("备注")
    private String remark;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Contract)) return false;
        Contract contract = (Contract) o;
        return Objects.equals(getContractName(), contract.getContractName()) &&
                Objects.equals(getContractType(), contract.getContractType()) &&
                Objects.equals(getContractStatus(), contract.getContractStatus()) &&
                Objects.equals(getContractAmount(), contract.getContractAmount()) &&
                Objects.equals(getContractPayType(), contract.getContractPayType()) &&
                Objects.equals(getContractStartDate(), contract.getContractStartDate()) &&
                Objects.equals(getContractEndDate(), contract.getContractEndDate()) &&
                Objects.equals(getContractNum(), contract.getContractNum()) &&
                Objects.equals(getCustomerSignContactId(), contract.getCustomerSignContactId()) &&
                Objects.equals(getOurSideSignUserId(), contract.getOurSideSignUserId()) &&
                Objects.equals(getContractSignDate(), contract.getContractSignDate()) &&
                Objects.equals(getContractFileIds(), contract.getContractFileIds()) &&
                Objects.equals(getRemark(), contract.getRemark());
    }

    @Override
    public int hashCode() {
        return Objects.hash(getContractName(), getContractType(), getContractStatus(), getContractAmount(),
                getContractPayType(), getContractStartDate(), getContractEndDate(), getContractNum(), getCustomerSignContactId(),
                getOurSideSignUserId(), getContractSignDate(), getContractFileIds(), getRemark());
    }
}
